package com.ruoyi.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.entity.Keywords;
import com.ruoyi.mapper.KeywordMapper;
import com.ruoyi.service.KeywordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 关键词服务实现类
 *
 * @author ruoyi
 */
@Service
@Slf4j
public class KeywordServiceImpl extends ServiceImpl<KeywordMapper, Keywords> implements KeywordService {

    /**
     * 获取所有启用的关键词列表
     *
     * @return 启用的关键词列表，按排序顺序升序排列
     */
    @Override
    public List<Keywords> listEnabledKeywords() {
        LambdaQueryWrapper<Keywords> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Keywords::getStatus, true)
                .orderByAsc(Keywords::getSortOrder);
        return list(wrapper);
    }

    /**
     * 根据类别获取启用的关键词列表
     *
     * @param category 关键词类别
     * @return 启用的关键词列表，按排序顺序升序排列
     */
    @Override
    public List<Keywords> listKeywordsByCategory(String category) {
        LambdaQueryWrapper<Keywords> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Keywords::getStatus, true)
                .eq(Keywords::getCategory, category)
                .orderByAsc(Keywords::getSortOrder);
        return list(wrapper);
    }

    /**
     * 根据ID获取关键词
     *
     * @param id 关键词ID
     * @return 关键词对象
     */
    @Override
    public Keywords getKeywordById(Integer id) {
        return getById(id);
    }

    /**
     * 创建关键词
     *
     * @param keywords 关键词对象
     * @return 是否成功创建关键词
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean createKeyword(Keywords keywords) {
        keywords.setCreatedAt(LocalDateTime.now());
        keywords.setUpdatedAt(LocalDateTime.now());
        // 默认启用状态
        if (keywords.getStatus() == null) {
            keywords.setStatus(true);
        }
        return save(keywords);
    }

    /**
     * 更新关键词
     *
     * @param keywords 关键词对象
     * @return 是否成功更新关键词
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateKeyword(Keywords keywords) {
        keywords.setUpdatedAt(LocalDateTime.now());
        return updateById(keywords);
    }

    /**
     * 删除关键词
     *
     * @param id 关键词ID
     * @return 是否成功删除关键词
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteKeyword(Integer id) {
        return removeById(id);
    }

    /**
     * 更新关键词状态
     *
     * @param id     关键词ID
     * @param status 新的状态
     * @return 是否成功更新关键词状态
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateKeywordStatus(Integer id, Boolean status) {
        Keywords keywords = getById(id);
        if (keywords == null) {
            log.warn("关键词不存在，id={}", id);
            return false;
        }
        keywords.setStatus(status);
        keywords.setUpdatedAt(LocalDateTime.now());
        return updateById(keywords);
    }
}
